#include <cstdio>
const int MAXN = 1001;
int stack[MAXN];
int tmp[MAXN];
int top = -1;//top = -1时，栈为空
//对于当前遍历到的数，只可能有两种情况，要么它比max大，要么它就必须跟栈顶的数相同
main()
{
    int M, N, K;
    scanf("%d%d%d", &M, &N, &K);
    int i, j;
    int max;//记录此次当前读取到的最大数
    while(K--)
    {
        top = -1;
        max = 0;
        for(i = 0; i < N; ++i)
        {
            scanf("%d", tmp + i);
        }
        for(i = 0; i < N; ++i)
        {//能遍历到最后的序列，说明是合法的输出顺序
            if(-1 == top || stack[top] != tmp[i])
            {
                if(max > tmp[i]) break;//跳出最近的一个循环
                else
                {
                    for (j = max + 1; j < tmp[i]; ++j)
                    {//入栈
                        stack[++top] = j;
                    }
                    if(top + 2 > M) break;//超出最大栈容量
                    max = tmp[i];//更新max
                }
            }else --top;
        }
        if(i == N) printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}